/*
 * TPkt2Line.java
 *
 * Created on 28 wrzesie� 2007, 13:27
 *
 * Klasa s�u�y do zamiany punkt�w na linie. Jest to opakowanie klasy Analizator
 *
 */

package odc;
import ste.TAbstBlock;
import gra.TVisualisation;
import out.*;

import java.util.*;
import java.awt.*;
import javax.swing.*;
import javax.vecmath.*; //do grafiki

/**
 *
 * @author Michal
 */
public class TPkt2Line extends TAbstBlock {
    
    private ArrayList<Odcinek> fOdcAL = new ArrayList<Odcinek>();
    private String[] theDesc = {
            "Maksymalny blad [m.]",
            "Maksymalna odleglosc [m.]",
    };
    private JSpinner theMaxErrSpi = new JSpinner(
                    new SpinnerNumberModel(Analizator.getMaxErr(),0,100,0.01));
    private JSpinner theMaxDistSpi = new JSpinner(
                    new SpinnerNumberModel(Analizator.getMaxDist(),0,100,0.01));
    
    public TPkt2Line() { 
theNo = 1;
    } //koniec konstruktora
    
    public void clear() {   //cz. odczyt nowego pliku. Kasuje dotychczasowe dane
        fOdcAL.clear(); theNext.clear();
    } //koniec clear

    public void starter(IOut o) {
        //System.out.println("TDaneWej.starter() - nowe skan w pionie !");
        TOut1_2 lOut = (TOut1_2)o;
        Analizator a = new Analizator(lOut.getXT(),lOut.getYT(),lOut.getZT(),(double)0);
        
        theNext.starter( new TOut2_3(a.segmenty()) );
        
        //Przygotowanie grafiki
        for (Odcinek odc : a.segmenty()) {
            /*
            System.out.println (
                "odc. od (" + odc.x1 + ", " + odc.y1 + ", " + odc.z1 + 
                ") do (" + odc.x2 + ", " + odc.y2 + ", " + odc.z2 + ");");
             */
            fOdcAL.add(odc);
        } //koniec for
    } //koniec starter
    
    public String getTabTitle() {   return "Odcinki";   }
    public JComponent getJComponent() {
        JPanel jp =  new JPanel();
        jp.setBackground(Color.green);
        jp.add(getMaxP());
        jp.add(getObjP());
        return jp;
    } //koniec getJComponent

    private JComponent getMaxP() { //panel z ustawieniami poczatkowymi
        JPanel jp = new JPanel(new GridLayout(0,2));
        Font font = new Font("System", Font.BOLD, 16);
        int _cnt = 0; //licznik pomocniczy
        
        //Maksymalny blad
        jp.add(new JLabel(theDesc[_cnt++].concat(" : "), JLabel.RIGHT));
        theMaxErrSpi.setFont(font);
        jp.add(theMaxErrSpi);

        //Maksymalna odleglosc
        jp.add(new JLabel(theDesc[_cnt++].concat(" : "), JLabel.RIGHT));
        theMaxDistSpi.setFont(font);
        jp.add(theMaxDistSpi);

        return jp;
    } //koniec getSetP
    
    public void setNext(TAbstBlock aN)  {   theNext = aN;   } //koniec setNext
    
    public void checkSettings() { //spr. i pobiera ustawienia poczatkowe
        try {
            Analizator.setMaxDist(Double.parseDouble(
                                        theMaxDistSpi.getValue().toString()));
            Analizator.setMaxErr(Double.parseDouble(
                                        theMaxErrSpi.getValue().toString()));
        } catch (NumberFormatException err) { //chyba niepotrzebne (?)
        } //koniec try-catch
        if (theNext != null)    theNext.checkSettings();
    } //koniec checkSettings
    
    public void showGraphic() {
        if (fOdcAL.size()==0) return; //gdy nie odczytano pliku
        //Tworze z odcinkow pkty
        Point3d[] p3T = new Point3d[fOdcAL.size()*2];
        int _cnt = 0; //licznik pomocniczy
        for (Odcinek odc : fOdcAL) {
            p3T[_cnt++] = new Point3d(odc.x1, odc.y1, odc.z1);
            p3T[_cnt++] = new Point3d(odc.x2, odc.y2, odc.z2);
        } //koniec for

        TVisualisation lVis = new TVisualisation(); //do grafiki
        lVis.addLineT(p3T);
        lVis.display(); //wy�wietlenie grafiki
    } //koniec showGraphic
} //koniec klasy TPkt2Line